package co.gov.medellin.ssti.sub.paoyer.administration.exception;

import co.gov.medellin.ssti.sub.paoyer.common.exception.ExceptionIdNotFound;
import co.gov.medellin.ssti.sub.paoyer.common.exception.ExceptionVO;
import co.gov.medellin.ssti.sub.paoyer.common.exception.ModuleExceptionInterface;
import co.gov.medellin.ssti.sub.paoyer.common.exception.ModuleVO;
import co.gov.medellin.ssti.sub.paoyer.common.exception.SystemException;

public class AdministrationUserException implements ModuleExceptionInterface {
	/**
	 * Informacon del modulo al que pertenece el error.
	 */
	public static final int ADMINISTRATION_MODULE = 1;

	/**
	 * Representa el error ocurrido cuando, al realizar la busqueda en la base
	 * de datos Oracle, el usuario no fue encontrado.
	 */
	public static final int ORACLE_USER_NOT_FOUND = ADMINISTRATION_MODULE
			* USER_EXCEPTION + 1;
	/**
	 * Representa el error ocurrido cuando un usuario intenta acceder a la
	 * aplicacion y su informacion de login y password no son correctas.
	 */
	public static final int WRONG_PASSWORD = ADMINISTRATION_MODULE
			* USER_EXCEPTION + 2;
	/**
	 * Error cuando los campos requeridos para la creacion de un usuario no han
	 * sido fijados en su totalidad
	 */
	public static final int NOT_ALL_REQUIRED_FIELDS = ADMINISTRATION_MODULE
			* USER_EXCEPTION + 3;
	/**
	 * Finalizo la Session
	 */
	public static final int ENDED_SESSION = ADMINISTRATION_MODULE
			* USER_EXCEPTION + 4;

	/**
	 * El usuario no puede loguearse porque no tiene permiso al recurso
	 */
	public static final int IMPOSIBLE_ACCESS_TO_USER = ADMINISTRATION_MODULE
			* USER_EXCEPTION + 5;

	public AdministrationUserException() {
	}

	/**
	 * Retorna un objeto ExceptionVO que contienen informacion detallada de un
	 * error que puede pasar en el modulo, segun el tipo de Excepcion pasado en
	 * el tipo.
	 * 
	 * @param messageId
	 *            int Identificador de la Excepcion definida para el modulo.
	 * @return ExceptionVO
	 */
	public ExceptionVO getExceptionVO(int exceptionId) throws SystemException {

		switch (exceptionId) {

		case ORACLE_USER_NOT_FOUND:
			return new ExceptionVO(
					AdministrationUserException.ORACLE_USER_NOT_FOUND,
					AdministrationUserException.ADMINISTRATION_MODULE,
					"Usuario no encontrado en el servidor Oracle.",
					"Consulte con el administrador....");
		case WRONG_PASSWORD:
			return new ExceptionVO(AdministrationUserException.WRONG_PASSWORD,
					AdministrationUserException.ADMINISTRATION_MODULE,
					"Credenciales no validas.",
					"Consulte con el administrador....");
		case NOT_ALL_REQUIRED_FIELDS:
			return new ExceptionVO(
					AdministrationUserException.NOT_ALL_REQUIRED_FIELDS,
					AdministrationUserException.ADMINISTRATION_MODULE,
					"No todos los campos requeridos para la creaci�n de un usuario, han sido especificados",
					"Por favor llenar todos los campos requeridos");
		case ENDED_SESSION:
			return new ExceptionVO(AdministrationUserException.ENDED_SESSION,
					AdministrationUserException.ADMINISTRATION_MODULE,
					"Su Sesion de usuario ha caducado ",
					"Vuelva ha logearse, por favor");
		case IMPOSIBLE_ACCESS_TO_USER:
			return new ExceptionVO(
					AdministrationUserException.IMPOSIBLE_ACCESS_TO_USER,
					AdministrationUserException.ADMINISTRATION_MODULE,
					"El usuario no tiene permisos suficientes ",
					"para acceder a la aplicacion ");

		default:
			throw new ExceptionIdNotFound(exceptionId);
		}
	}

	/**
	 * Obtiene un objeto <code>ModuleVO</code> que contiene el nombre del modulo
	 * y la clase que maneja las excepciones.
	 * 
	 * @return Objeto <code>ModuleVO</code> que contiene el nombre del modulo y
	 *         la clase que maneja las excepciones.
	 */
	public ModuleVO getModuleVO() {

		return new ModuleVO("ADMINISTRATION", this.getClass().getName());
	}
}